﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace DHQGHN.PM0.Models.Admin
{
    public class CountryModel
    {
        #region Property of country model
        public String Country_ID { get; set; }

        [Remote("CheckExistCountryCode2", "Country", ErrorMessage = "CountryNameExist", HttpMethod = "POST", AdditionalFields = "Country_ID")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Bạn chưa nhập mã quốc gia")]
        [StringLength(2, ErrorMessage = "Độ dài tối đa là 2 ký tự")]
        [RegularExpression(@"^[a-zA-Z0-9]+[a-zA-Z0-9_]*[a-zA-Z0-9]*$", ErrorMessage = "Mã không đúng định dạng")]
        [Display(Name = "Mã ISO Alpha 2 Code")]
        public string Country_Code2 { get; set; }

        [Remote("CheckExistCountryCode3", "Country", ErrorMessage = "CountryNameExist", HttpMethod = "POST", AdditionalFields = "Country_ID")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Bạn chưa nhập mã quốc gia")]
        [StringLength(3, ErrorMessage = "Độ dài tối đa là 3 ký tự")]
        [RegularExpression(@"^[a-zA-Z0-9]+[a-zA-Z0-9_]*[a-zA-Z0-9]*$", ErrorMessage = "Mã không đúng định dạng")]
        [Display(Name = "Mã ISO Alpha 3 Code")]
        public string Country_Code3 { get; set; }

        [Remote("CheckExistCountryNumericCode", "Country", ErrorMessage = "CountryNameExist", HttpMethod = "POST", AdditionalFields = "Country_ID")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Bạn chưa nhập mã số")]
        [Display(Name = "ISO Numeric Code")]
        [RegularExpression("^[0-9]+$", ErrorMessage = "Mã số cần là ký tự kiểu số")]
        public int? Numeric_Code { get; set; }

        [Remote("CheckExistCountryName", "Country", ErrorMessage = "CountryNameExist", HttpMethod = "POST", AdditionalFields = "Country_ID")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Bạn chưa nhập tên quốc gia")]
        [StringLength(255, ErrorMessage = "Độ dài tối đa là 255 ký tự")]
        [Display(Name = "Tên quốc gia")]
        public string Country_Name { get; set; }

        [StringLength(255, ErrorMessage = "Độ dài tối đa là 255 ký tự")]
        [Display(Name = "Tên quốc tịch")]
        public string Nationality_Name { get; set; }

        [StringLength(255, ErrorMessage = "Độ dài tối đa là 255 ký tự")]
        [Display(Name = "Mô tả")]
        public string Descriptions { get; set; }

        public int RecordCount { get; set; }
        public int Deleted { get; set; }
        #endregion

        #region Field list from database
        public const string FIELD_ID = "COUNTRY_ID";
        public const string FIELD_CODE_2 = "COUNTRY_CODE2";
        public const string FIELD_CODE_3 = "COUNTRY_CODE3";
        public const string FIELD_NUMERIC_CODE = "NUMERIC_CODE";
        public const string FIELD_COUNTRY_NAME = "COUNTRY_NAME";
        public const string FIELD_NATIONALITY_NAME = "NATIONALITY_NAME";
        public const string FIELD_DESCRIPTIONS = "DESCRIPTIONS";
        public const string FIELD_DELETED = "DELETED";
        public const string FIELD_RECORD_COUNT = "RecordCount";
        #endregion

        public CountryModel()
        {
            // TODO: Complete member initialization
        }

        public CountryModel(DAL.Models.Admin.CountryModel model)
        {
            // TODO: Complete member initialization
            Country_ID = model.Country_ID;
            Country_Code2 = model.Country_Code2;
            Country_Code3 = model.Country_Code3;
            Deleted = model.Deleted;
            Numeric_Code = model.Numeric_Code;
            Country_Name = model.Country_Name;
            Nationality_Name = model.Nationality_Name;
            Descriptions = model.Descriptions;
            RecordCount = model.RecordCount;
        }


        internal DAL.Models.Admin.CountryModel toDALModel()
        {
            DAL.Models.Admin.CountryModel model = new DAL.Models.Admin.CountryModel
            {
                Country_ID = Country_ID,
                Country_Code2 = Country_Code2,
                Country_Code3 = Country_Code3,
                Deleted = Deleted,
                Numeric_Code = Numeric_Code,
                Country_Name = Country_Name,
                Nationality_Name = Nationality_Name,
                Descriptions = Descriptions,
                RecordCount = RecordCount
            };
            return model;
        }
    }
}